package com.huiruan.controller.pc.sys;

import com.huiruan.entity.SysMenu;
import com.huiruan.service.SysMenuService;
import com.huiruan.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.HashSet;
import java.util.Set;

/**
 * @author CTL
 * @create 2025-07-15 21:26
 */
@RestController
@RequestMapping("/pc/sysMenu")
public class SysMenuController {

    @Autowired
    private SysMenuService sysMenuService;

    /**
     * 获取当前用户的树形菜单集合
     * @param type 菜单类型
     * @param parentId 父菜单ID
     * @return 包含菜单数据的响应对象
     */
    @GetMapping
    public Result getUserMenu(String type, Long parentId) {
        // 获取符合条件的菜单
//        Set<SysMenu> all = new HashSet<>();
//        SecurityUtils.getRoles().forEach(roleId -> all.addAll(sysMenuService.findMenuByRoleId(roleId)));
//        return Result.success(sysMenuService.filterMenu(all, type, parentId));
        return  Result.success();
    }

    /**
     * 获取树形菜单集合
     * @param parentId 父节点ID
     * @param menuName 菜单名称
     * @param type 菜单类型
     * @return 包含树形菜单的响应结果
     */
    @GetMapping(value = "/tree")
    public Result getMenuTree(Long parentId, String menuName, String type) {
        return Result.success(sysMenuService.getMenuTree(parentId, menuName, type));
    }

    /**
     * 根据角色ID获取菜单树
     * @param roleId 角色ID
     * @return 包含菜单ID列表的响应结果
     */
    @GetMapping("/tree/{roleId}")
    public Result getRoleTree(@PathVariable Long roleId) {
        return Result.success(sysMenuService.findMenuByRoleId(roleId).stream().map(SysMenu::getMenuId).toList());
    }

    /**
     * 通过ID查询菜单的详细信息
     * @param id 菜单ID
     * @return 包含菜单详细信息的响应对象
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable Long id) {
        return Result.success(sysMenuService.getById(id));
    }

    /**
     * 新增菜单
     * @param sysMenu 菜单信息
     * @return 操作结果
     */
    //@SysLog("新增菜单")
    @PostMapping
    //@HasPermission("sys_menu_add")
    public Result saveMenu(@Valid @RequestBody SysMenu sysMenu) {
        sysMenuService.save(sysMenu);
        return Result.success(sysMenu);
    }

    /**
     * 根据菜单ID删除菜单
     * @param id 要删除的菜单ID
     * @return 操作结果，成功返回success，失败返回false
     */
    //@SysLog("删除菜单")
    @DeleteMapping("/{id}")
    //@HasPermission("sys_menu_del")
    public Result removeById(@PathVariable Long id) {
        return sysMenuService.removeMenuById(id);
    }

    /**
     * 更新菜单信息
     * @param sysMenu 菜单对象
     * @return 操作结果
     */
    //@SysLog("更新菜单")
    @PutMapping
    //@HasPermission("sys_menu_edit")
    public Result updateMenu(@Valid @RequestBody SysMenu sysMenu) {
        return Result.success(sysMenuService.updateMenuById(sysMenu));
    }

}
